package com.itheima52.mobilesafe.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;

import org.xmlpull.v1.XmlSerializer;

import android.R.xml;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.os.SystemClock;
import android.util.Xml;


/**
 * 短信的工具类
 * 
 * @author ludaxu
 * 
 */
public class SmsUtils {

	/**
	 * 备份短信的接口
	 * @author ludaxu
	 *
	 */
	public interface BackUpSms {
		public void befor(int count);

		public void onBackUpSms(int process);

	}

	public static boolean backUp(Context context, BackUpSms backUpSms) {

		/**
		 * 目的:备份短信 1.判断当前用户是否有sd卡 2.短信的数据库权限为---使用内容观察者 3.写短息到sd卡
		 */
		// 如果能进来,说明用户有sd卡
		ContentResolver resolver = context.getContentResolver();
		Uri uri = Uri.parse("content://sms/");
		// type=1接收短信,type=2发送短信cursor表示游标
		Cursor cursor = resolver.query(uri, new String[] { "address", "date",
				"type", "body" }, null, null, null);
		// 获取一共有多少条短信
		int count = cursor.getCount();
//		dialog.setMax(count);
		backUpSms.befor(count);
		int progress = 0;
		// 判断当前sd卡的状态值
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {

			// 写文件
			try {
				// 把短信备份到sd卡,第二个参数表示名字
				File file = new File(Environment.getExternalStorageDirectory(),
						"backup.xml");
				FileOutputStream os = new FileOutputStream(file);
				// 得到序列化器,在android系统里面,所有有关xml解析都是pull解析
				XmlSerializer serializer = Xml.newSerializer();
				// 把短信序列化到sd卡,设置编码格式
				serializer.setOutput(os, "utf-8");
				// standalone表示是否是独立文件,
				serializer.startDocument("utf-8", true);
				// 设置开始节点,第一个时命名空间,第二个时节点名字
				serializer.startTag(null, "smss");
				while (cursor.moveToNext()) {
					serializer.startTag(null, "sms");
					serializer.startTag(null, "address");
					// 设置文本的内容
					serializer.text(cursor.getString(0));
					serializer.endTag(null, "address");
					serializer.startTag(null, "date");
					// 设置文本的内容
					serializer.text(cursor.getString(1));
					serializer.endTag(null, "date");
					serializer.startTag(null, "type");
					// 设置文本的内容
					serializer.text(cursor.getString(2));
					serializer.endTag(null, "type");
					serializer.startTag(null, "body");
					// "123"为秘钥   后面为加密的内容
					serializer.text(Crypto.encrypt("123", cursor.getString(3)));
					serializer.endTag(null, "body");

					serializer.endTag(null, "sms");
					progress++;
//					dialog.setProgress(progress);
					backUpSms.onBackUpSms(progress);
					SystemClock.sleep(1000);
				}
				cursor.close();

				serializer.endTag(null, "smss");

				serializer.endDocument();
				os.flush();
				os.close();
				return true;

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

		return false;

	}

}
